/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package presentacion.models;

import dtos.DTODetalleProducto;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import logicaNegocio.ExpertoRealizarPedido;

/**
 *
 * @author Sebastian
 */
public class TableModelFilaDetalleProducto extends AbstractTableModel {

    private List<DTODetalleProducto> dtos;
    private static final long serialVersionUID = 1L;
    private static final String[] NOMBRE_COLUMNAS = {"Nombre", "Marca", "Descripción", "Stock", "Cantidad", "Importe", "Disponible"};
    
    private static final boolean[] COLUMNAS_EDITABLES = {false, false, false, false, false, false, false};

    private static final Class[] CLASE_COLUMNAS =
        {java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Double.class, java.lang.Boolean.class};    
    

    public TableModelFilaDetalleProducto() {
        this.dtos = new ArrayList<DTODetalleProducto>(0);
    }

    @Override
    public String getColumnName(int columna) {
        return NOMBRE_COLUMNAS[columna];
    }
    
    @Override
    public Class<?> getColumnClass(int columna) {
        return CLASE_COLUMNAS[columna];
    }

    @Override
    public boolean isCellEditable(int fila, int columna) {
        return COLUMNAS_EDITABLES[columna];
    }
    
    @Override
    public int getRowCount() {
        return dtos != null ? dtos.size() : 0;
    }

    @Override
    public int getColumnCount() {
        return NOMBRE_COLUMNAS.length;
    }
    
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        DTODetalleProducto fila = dtos.get(rowIndex);
        Object resultado = null;
        switch (columnIndex) {
            case 0:
                resultado = fila.getdTOProducto().getNombreProducto();
                break;
            case 1:
                resultado = fila.getdTOProducto().getMarca();
                break;
            case 2:
                resultado = fila.getdTOProducto().getDescripcion();
                break;
            case 3:
                resultado = fila.getdTOProducto().getCantDisponible();
                break;                
            case 4:
                resultado = fila.getCantidadSeleccionada();
                break;
            case 5:
                resultado = fila.getSubtotal();
                break;
            case 6:
                resultado = fila.isStockSuficiente();
                break;                
            default:
                throw new AssertionError();
        }
        return resultado;
    }
    
    @Override
    public void setValueAt(Object aValue, int row, int column) {
//        DTODetalleProducto fila = dtos.get(row);
//        switch (column) {
//
//            case 4:
//                fila.setCantidadSeleccionada((Integer)aValue);
//                fila.setSubtotal(fila.getdTOProducto().getPrecio()*(Integer)aValue);
//                ExpertoRealizarPedido.aplicarPromocion(fila);
//                fireTableDataChanged();
//                break;
//            default:
//                throw new AssertionError();
//        }
    }    
    

    public void addRow(DTODetalleProducto dTODetalleProducto) {
        dtos.add(dTODetalleProducto);
        fireTableDataChanged();
    }

    public void removeRow(DTODetalleProducto dTODetalleProducto) {
        dtos.remove(dTODetalleProducto);
        fireTableDataChanged();
    }

    public void clear() {
        dtos.clear();
    }

    public List<DTODetalleProducto> getRows() {
        return dtos;
    }

    public void setRows(List<DTODetalleProducto> dTODetallesProductos) {
        dtos = dTODetallesProductos;
        fireTableDataChanged();
    }

    public DTODetalleProducto getRow(int nroFila) {
        return dtos.get(nroFila);
    }

    public List<DTODetalleProducto> getSelectedRows() {
        List<DTODetalleProducto> seleccionadas;
        seleccionadas = new ArrayList<DTODetalleProducto>();
        if (!dtos.isEmpty()) {
            for (DTODetalleProducto dTOServicio : dtos) {
                if (dTOServicio.isSeleccionado()) {
                    seleccionadas.add(dTOServicio);
                }
            }
        }
        return seleccionadas;    
    }
    
    public void removeSelectedRows(){
        List<DTODetalleProducto> seleccionadas = getSelectedRows();
        for (DTODetalleProducto dTODetalleProducto : seleccionadas) {
            removeRow(dTODetalleProducto);
        }
    }
    
    public void removeSelectedRow(int[] indicefilaSeleccionada){
        for (int i = 0; i < indicefilaSeleccionada.length; i++) {
            dtos.get(indicefilaSeleccionada[i]).setSeleccionado(true);            
        }
    }  
    
    public void refrescarTabla(){
        fireTableDataChanged();
    }
    
    public void removeSelectedRows(int nroFila){
        dtos.remove(nroFila);
        fireTableDataChanged();
    }
}
